package com.hqyj.shrio;

import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authz.AuthorizationFilter;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 自定义角色的过滤器，实现 角色配置或的关系
 */
public class MyRoles extends AuthorizationFilter {
    protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object mappedValue) throws Exception {
        //1 获取shiro登录校验通过的用户对象
        Subject subject = getSubject(servletRequest, servletResponse);
        //2 获取配置的过滤器的自定义参数
        String[] params = (String[]) mappedValue;

        //如果没有设置角色参数，默认成功
        if (params == null || params.length == 0) {
            return true;
        }

        //3 判断用户是否有这些角色参数
        for (String s : params) {
            System.out.println("拥有的角色参数：" + s);
            /*判断授权通过过的角色 是否含有配置过滤器的角色参数，如果有任意一个，我就允许访问*/
            /* 判断权限的方法是： subject.isPermitted()*/
//            if (subject.isPermitted(s)){
//                return true;
//            }
            if (subject.hasRole(s)) {
                return true;
            }
        }
        return false;
    }
}
